package reflectstudy;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * 获取属性测试
 */
public class Test02 {
    public static void main(String[] args) throws Exception {
        Class<?> aClass = Class.forName("reflectstudy.Student");
        // 获取当前运行时 类 和 父类 中 被public修饰的属性
        Field[] fields = aClass.getFields();
        for (Field f : fields){
            System.out.println(f);
        }

        System.out.println("--------------------------");

        // getDeclaredFields 可以获取所有属性
        Field[] declaredFields = aClass.getDeclaredFields();
        for (Field f:declaredFields){
            System.out.println(f);
        }

        System.out.println("--------------------------");

        // 获取指定属性 getField 只能获取public修饰的  getDeclaredField 可以获取所有的
        Field field = aClass.getDeclaredField("stuno");
        System.out.println(field);

        System.out.println("--------------------------");

        // 获取属性修饰符  属性数据结构 修饰符 属性名称
        // 修饰符 试试用数字表示的  Modifier 类中
        String name1 = field.getName();
        System.out.println("name:"+name1);

        Class<?> type = field.getType();
        System.out.println("type:"+type.getName());

        int modifiers = field.getModifiers();
        String s = Modifier.toString(modifiers);
        System.out.println("modify 代表数字:"+modifiers);
        System.out.println("modify 具体类型:"+s);


        System.out.println("--------------------------");

        // 给属性赋值 给属性赋值 必须要有对象
        Field score = aClass.getField("score");
        Object o = aClass.newInstance();
        score.set(o,99); // 给o对象 的score 属性赋值 99
        System.out.println(o);

    }
}
